package com.ddxz.middleground.meta.service;

import com.ddxz.middleground.meta.dto.MetaHeader;
import com.ddxz.middleground.meta.dto.object.BaseObjectInfo;
import com.ddxz.middleground.meta.dto.object.ObjectPage;
import com.ddxz.tool.web.dto.DdxzResponse;

import java.util.List;

/**
 * interface description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/8/23
 */

public interface ObjectService {
    /**
     * 检索对象清单
     *
     * @param header 请求头信息
     * @param page   分页检索信息
     * @param type   检索分类：0 检索自己的所有资源；1 检索自己的所有资产； 2 检索自己及他人的可订阅资产
     * @return 以分页形式检索对象信息
     */
    DdxzResponse objectSearch(MetaHeader header, ObjectPage page, int type);

    /**
     * 查看对象详情
     *
     * @param header   请求头信息
     * @param objectId 对象标识
     * @return 查看对象详情
     */
    DdxzResponse objectDetail(MetaHeader header, String objectId);

    /**
     * 保存对象信息
     *
     * @param header     请求头信息
     * @param objectInfo 待保存对象信息
     * @return 是否保存成功
     */
    DdxzResponse objectSave(MetaHeader header, BaseObjectInfo objectInfo);

    /**
     * 移除对象信息
     *
     * @param header   请求头信息
     * @param objectId 对象标识
     * @return 是否移除成功
     */
    DdxzResponse objectRemove(MetaHeader header, String objectId);

    /**
     * 将对象注册指定的目录中
     *
     * @param header    请求头信息
     * @param dirIdList 目录清单
     * @param objectId  对象标识
     * @return 是否注册成功
     */
    DdxzResponse objectRegister(MetaHeader header, String objectId, List<String> dirIdList);

    /**
     * 将对象从所有目录移除
     *
     * @param header   请求头信息
     * @param objectId 对象信息
     * @return 是否移除成功
     */
    DdxzResponse objectUnregister(MetaHeader header, String objectId);

    /**
     * 对象发布，
     *
     * @param header     请求头信息
     * @param objectId   对象标识
     * @param permission 发布标识
     * @return 是否发布成功
     */
    DdxzResponse objectIssue(MetaHeader header, String objectId, Integer permission);

    /**
     * 撤销发布
     *
     * @param header   请求头信息
     * @param objectId 对象标识
     * @return 是否撤销成功
     */
    DdxzResponse objectUnissued(MetaHeader header, String objectId);
}
